#ifndef _BCR_TYPEDEF_
#define _BCR_TYPEDEF_

#ifndef IEC_ENDIAN
#error please include "iec10x.h" first
#endif

// 二进制计数器读数器，累积量

#include "CPxTime2a.h"

typedef struct BCR{
    uint8_t val[4];
    union  {
        #if (IEC_ENDIAN == IEC_LITTLE_ENDIAN)
            uint8_t SQ : 5 ; //顺序位
            uint8_t CY : 1 ; //进位，0：在相应的累加周期内计数器未溢出
            uint8_t CA : 1 ; //计数量被调整
            uint8_t IV : 1 ; //为 0 时无效
        #else
            uint8_t IV : 1 ; //顺序位
            uint8_t CA : 1 ; //顺序位
            uint8_t CY : 1 ; //顺序位
            uint8_t SQ : 5 ; //顺序位
        #endif
    }CP8;
}
BCR_t;


typedef BCR_t BCR0T_t; //M_IT_NA_1

typedef struct BCR24T {
    uint8_t val[4];
    union  {
        #if (IEC_ENDIAN == IEC_LITTLE_ENDIAN)
            uint8_t SQ : 5 ; //顺序位
            uint8_t CY : 1 ; //进位，0：在相应的累加周期内计数器未溢出
            uint8_t CA : 1 ; //计数量被调整
            uint8_t IV : 1 ; //为 0 时无效
        #else
            uint8_t IV : 1 ; //顺序位
            uint8_t CA : 1 ; //顺序位
            uint8_t CY : 1 ; //顺序位
            uint8_t SQ : 5 ; //顺序位
        #endif
    }CP8;
	struct CP24Time2a time;
}
BCR24T_t; // M_IT_TA_1


typedef struct BCR56T {
    uint8_t val[4];
    union  {
        #if (IEC_ENDIAN == IEC_LITTLE_ENDIAN)
            uint8_t SQ : 5 ; //顺序位
            uint8_t CY : 1 ; //进位，0：在相应的累加周期内计数器未溢出
            uint8_t CA : 1 ; //计数量被调整
            uint8_t IV : 1 ; //为 0 时无效
        #else
            uint8_t IV : 1 ; //顺序位
            uint8_t CA : 1 ; //顺序位
            uint8_t CY : 1 ; //顺序位
            uint8_t SQ : 5 ; //顺序位
        #endif
    }CP8;
	struct CP56Time2a time;
}
BCR56T_t; // M_IT_TB_1


#endif
